home *** CD-ROM | disk | FTP | other *** search
- package org.flintparticles.zones
- {
- import flash.geom.Point;
-
- public class MultiZone implements Zone
- {
-
-
- private var _areas:Array;
-
- private var _zones:Array;
-
- private var _totalArea:Number;
-
- public function MultiZone()
- {
- super();
- _zones = new Array();
- _areas = new Array();
- _totalArea = 0;
- }
-
- public function getArea() : Number
- {
- return _totalArea;
- }
-
- public function getLocation() : Point
- {
- var _loc1_:Number = NaN;
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- _loc1_ = Math.random() * _totalArea;
- _loc2_ = int(_zones.length);
- _loc3_ = 0;
- while(_loc3_ < _loc2_)
- {
- if((_loc1_ = _loc1_ - _areas[_loc3_]) <= 0)
- {
- return _zones[_loc3_].getLocation();
- }
- _loc3_++;
- }
- if(_zones.length == 0)
- {
- throw new Error("Attempt to use a MultiZone object that contains no Zones");
- }
- return _zones[0].getLocation();
- }
-
- public function addZone(param1:Zone) : void
- {
- var _loc2_:Number = NaN;
- _zones.push(param1);
- _loc2_ = param1.getArea();
- _areas.push(_loc2_);
- _totalArea += _loc2_;
- }
-
- public function removeZone(param1:Zone) : void
- {
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- _loc2_ = int(_zones.length);
- _loc3_ = 0;
- while(_loc3_ < _loc2_)
- {
- if(_zones[_loc3_] == param1)
- {
- _totalArea -= _areas[_loc3_];
- _areas.splice(_loc3_,1);
- _zones.splice(_loc3_,1);
- return;
- }
- _loc3_++;
- }
- }
-
- public function contains(param1:Number, param2:Number) : Boolean
- {
- var _loc3_:int = 0;
- var _loc4_:int = 0;
- _loc3_ = int(_zones.length);
- _loc4_ = 0;
- while(_loc4_ < _loc3_)
- {
- if(_zones[_loc4_].contains(param1,param2))
- {
- return true;
- }
- _loc4_++;
- }
- return false;
- }
- }
- }
-